<?php

/* 
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
namespace app\pay\admin;
use \think\Loader;
use think\Reuqest;
use app\admin\controller\Admin;
use app\pay\model\Pay as PayModel;
use think\Db;

/**
 * 地址管理
 * @package app\admin\controller
 */
class Api extends Admin{
	//支付金额
     private $money;
     //商品描述
     private $body;
     //商品详情
     private $detail;
     //附加数据
     private $attach;
     //商户订单号
     private $out_trade_no;
     //支付回调地址
     private $notify_url;
     //交易结束时间
     private $end_time;
     //用户openid
     private $openid;
    /* //微信配置类
     private $tools;
     //微信下单类
     private $input;*/
     //自动加载类
     public function __construct() {
     	//引入微信支付类
       Loader::import('Wxpay.WxPayPubHelper',EXTEND_PATH); 
    
       
       
        
    }

    public function index()
    {
    	
        $this->receiveParameter();
        $this->setParameter();
    	 
      
    }

    //获取参数 并判断是否存在支付参数
    private function receiveParameter(){
		$this->uid = input('param.uid');
    	$this->projectid = input('param.projectid');
    	$pay= Db::name('pay')->where(array('openid'=>$this->uid,'projectid'=>$this->projectid))->find();
    	if (!$pay) {
    		outFormat('','未开启支付!');
    	}	//支付参数
    		$this->pay=$pay;
    	 	//支付金额
            $this->money=input('param.money');
            //商品描述
            $this->body=input('param.body');
            //订单详情
            $this->detail=input('param.detail');
            //附加数据 分店信息等
            // $this->attach=input('param.attach');
            //商户订单号
            $this->out_trade_no=input('param.out_trade_no');
            //支付回掉地址
            $this->notify_url=input('param.notify_url');
            //交易时长
            $this->end_time=input('param.end_time');
             //用户openid
            $this->openId=input('param.openid');
    }
    //设置支付参数
    private function setParameter(){
    	//微信配置类
    	$tools = new \JsApiPay();
    	// 微信下单类
        $input = new \WxPayUnifiedOrder();
        //设置微信支付类 appid
		$tools::$appid= $this->pay['appid'];
		//支付类appSecret
        $tools::$secret= $this->pay['appSecret'];
        //支付商户号
        $tools::$mchid= $this->pay['mch_id'];
        //支付key
        $tools::$key=$this->pay['appkey'];
        //下单内容
        $input->SetBody($this->body);
        //商户订单号
        $input->SetOut_trade_no($this->out_trade_no);
        // //设置分店号
        // $input->SetAttach($attach);
        //设置支付金额
         $input->SetTotal_fee($this->money);
         //设置交易开始时间
         $input->SetTime_start(date("YmdHis"));
         //设置交易结束时间
         $input->SetTime_expire(date("YmdHis",time()+$this->end_time));
         //设置订单详情
		$input->SetDetail($this->detail);
		//设置支付成功回调地址
        $input->SetNotify_url($this->notify_url);
        //设置支付类型
        $input->SetTrade_type("JSAPI");
        //设置openID
		$input->SetOpenid($this->openId);
		//传入参数 获得下单接口需要的参数
        $order = \WxPayApi::unifiedOrder($input);
        // dump($order);
        //给下单接口传入参数 获得返回的调起JSapi支付需要的参数
        $jsApiParameters = $tools->GetJsApiParameters($order);
        echo $jsApiParameters ;exit;
    }
    public function notify(){
    	//微信支付回调传过来的xml
    	$xml= file_get_contents("php://input");
    	//写入支付文件
    	file_put_contents('zhifu_log.txt', $xml,FILE_APPEND);
    	//转化xml为数组
        $data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), TRUE);
        file_put_contents('pay_log.txt', $data,FILE_APPEND);
          $result = $data['return_code'];//返回码 用来判断是否支付成功
       		$wx_sign = $data['sign'];//是否微信返回
       		if ($result == 'SUCCESS') {
       			$ordersn = $data['out_trade_no']; //商城订单号
            	$openid = $data['openid']; //用户标识
            	$cash_fee = $data['cash_fee'] * 0.01; //支付金额
            	//根据支付里面的订单号 用户信息 查找订单数据
            	 $order=Db::name('order')->where(array('openid'=>$openid,'ordersn'=>$ordersn))->find();
            	 	if ($order['status'] == 0 && $order['price'] == $cash_fee) {
            	 		$wxorder = $data['transaction_id']; //微信订单号
                	   $endtime = strtotime($data['time_end']); //订单支付时间
                	   $tag['transaction_id']= $wxorder;
                	   $orderData['status'] = 1;
                	   $orderData['paytype'] = 21;
                	   $orderData['paytime'] = $endtime;
                	    Db::name('order')->where(array('id'=>$order['id']))->update($orderData);
                	    echo "SUCCESS";
            	 	}else{
            	 		 echo "SUCCESS";
            	 	}
       		}else{
       			echo "SUCCESS";
       		}
    }
}
